﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace HOOMT
{
    class HighStateDiagram: StateDiagram
    {
        private bool hasModelForm = false;
        private StateTransitionModelForm newModelForm;
        public string newModelFormId = null;
        //####################################################################################
        #region 构造函数
        public HighStateDiagram(Point point, int width = 140, int height = 80)
            :base(point, width, height)
        {
            name = "HighStateDiagram";
        }
        #endregion

        public override void Drawing(Graphics g, OriginalModelForm m)
        {
            //绘制对象
            Pen pen = new Pen(Color.Black, 1);
            Rectangle rect1 = new Rectangle(upLeftpoint.X, upLeftpoint.Y, width, height);
            Rectangle rect2 = new Rectangle(upLeftpoint.X + 10, upLeftpoint.Y + 10, width - 20, height - 20);
            DrawRoundRectangle(g, pen,rect1, 10);
            DrawRoundRectangle(g, pen, rect2, 10);
            //显示文字
            base.Drawing(g, m);
        }
        private void DrawRoundRectangle(Graphics g, Pen pen, Rectangle rect, int cornerRadius)
        {
            using (GraphicsPath Path = CreateRoundedRectanglePath(rect, cornerRadius))
            {
                g.DrawPath(pen, Path);
            }
        }
        private GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
        {
            GraphicsPath roundedRect = new GraphicsPath();
            roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);
            roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);
            roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);
            roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);
            roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);
            roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);
            roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);
            roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);
            roundedRect.CloseFigure();
            return roundedRect;
        }

        public bool HasModelForm
        {
            get
            {
                return hasModelForm;
            }
            set
            {
                hasModelForm = value;
            }
        }
        public StateTransitionModelForm NewModelForm
        {
            get
            {
                return newModelForm;
            }
            set
            {
                newModelForm = value;
            }
        }
    }
}
